iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

初階面試常見題目彙整系列 第 24

初階面試常見題目回答-非關聯式資料庫介紹-Mongo-鐵人賽第二十四日

  • 分享至 

  • xImage
  •  

昨天說到關聯式資料庫,
各位很常會跟著學習正規化,
正規化是一種提高資料一致性跟效率的方式,
什麼第一第二第三....,然後一直畫圖。

各位恭喜,
現在要訴說的的SQL,
相對來說比較不常說正規化

NOSQL(Not only SQL或其他翻譯)
全名為非關聯式資料庫,
雖然筆者有一點想吐槽如果像昨日那樣翻譯,
就會是非結構式語言,

而在眾多NOSQL中,
筆者最常用的就是Mongo,
接下來會以Mongo作為引子帶大家認識NOSQL。

那麼主要是透過
_id
在 MongoDB 中,_id 欄位是文件的主鍵(Primary Key),代表文件的唯一值。每個文件都會有一個獨特的 _id 值,用於確保集合內資料的一致性和準確性。
若使用者在創建新文件時沒有指派 _id 值,MongoDB 會自動為集合中的每個文件生成一個長度為 12 位元組的 _id 值。
自動生成 _id值能確保資料的唯一性,使得資料在集結內的檢索變得更加直接和可靠。

索引(Indexes)
使用者可以在集結中的任何欄位上建立次級索引,次級索引能幫助使用者更快的搜尋 BSON 文件。
與預設的 _id 欄位索引不同,次級索引允許使用者在不同欄位上進行快速檢索。少了這個功能,使用者就需要對整個集合進行掃描,逐一查找文件欄位。
次級索引在處理巨量資料時尤其重要,因為執行全集結掃描(Collection Scan)的成本非常高。

簡單來說,索引(Indexes)通常建立經查被作為查詢條件的欄位,
例如使用者的集結中儲存客戶資訊,並經常需要根據郵件進行查詢,那麼我們就可以在電子郵件地址這個欄位上建立次級索引,這樣就能直接透過電子郵件地址查詢使用者資料。

而筆者對Mongo比較深的印象就是分佈式數據庫,
曾在恍神的狀況下被問過Mongo,

那時候筆者說Mongo就是資料存在很多台Server上面,
如果其中一台錯誤會有另一台來用,
而這個機制總會讓筆者想起RAID0、RAID1...。

這個機制就是會有一台為Primary(主節點),其他台為 Secondary(從節點),
寫入操作只能透過Primary,並且會把資料複製到Secondary,
一旦Primary出現問題,就會自動把Secondary用作主節點,
因為他是偏RAID1(鏡射)的形式,
有著比較高的一致性,
所以通常不會有差異,除非真的剛好在更新,
網路不好而造成有誤差。

當然這個機制,
所帶來的壞處就也顯而易見,
額外的容量帶來額外的成本。

除此之外,
Mongo採取的結構是半結構化資料(Semi-Structured Data),
對於許多的定義不會那麼死,
使用BSON(Binary JSON)格式的文檔,
實際使用上就像是key,value。

而value也很自由,
就算更改欄位型態,
也不像是關聯式資料庫那樣麻煩,
甚至可以從int欄位轉成string。

簡單來說,關聯式資料庫存取結構化資料,
而Mongo,存取除此之外的資料,
不論半結構化資料或非結構化資料。

在擴充上,
關聯式資料庫,
只能垂直擴充 (Scale Up),
也就是一個Server內添加更多資源,
如CPU、記憶體、GPU等等,
也就是增強一台機器的硬體,
而這往往到達一個上限就會開始變得昂貴。

Mongo可以支援水平擴充(Horizontal Scaling),
簡單來說就是可以很多Server進行處理,
可以透過分片(Sharding)技術,
把資料分成多個片段,
讓不同的伺服器一起處理,
也就是所謂的平行處理。

聽起來很美妙,
當然水平擴充有其壞處,
就如同很多狀況一樣,
好處即是壞處,
讓各個伺服器能有一致性,
分片處理得好,這些都是問題。

那麼就該說說如何挑選適合的資料庫,
確切方式往往就是擇其優,避其劣。

是否需要使用分片(Sharding)技術,
例如雲端資料庫需要使用大量的運算功能,
資料也需要被快速地發送至多個伺服器,
這就可以考慮。

如果建置好,但沒有多餘人手去維護DB,
那麼這時候也可以考慮MongoDB。
從以上可以看到,相較與關聯式資料庫,
Mongo可以在比較少維運的狀況下運作,
不會像是關聯式資料庫一樣只有一台Server,
掛了要切換就都要手動切換。

結構上的靈活性,
在於結構會有所變化上,
Mongo也會有對應功能。

反過來說是資料並不複雜,
因為關聯式最大的優點就是資料可以大量關聯,
例如Join許多張表。

雖然Mongo可以用查詢,
但對於關聯式資料庫也可以製作索引,
而且往往也配備了優化器,
以至於如果要查詢複雜資料,
往往都會是使用關聯式資料庫。

實際使用上,
會有許多互補的關係。

最後再次總結一下,筆者印象深刻的幾個特點。

---關聯式資料庫
結構固定
一致性需求特別高(例如金融,常使用外鍵約束、唯一性約束等。)
需要複雜的查詢和多表關聯

---非關聯式資料庫
結構彈性
分散式架構-資料規模很大,需要水平擴充,以應對高負載
低維護人員


上一篇
初階面試常見題目回答-關聯式資料庫與SQL-鐵人賽第二十三日
下一篇
初階面試常見題目回答-部屬與自動化部屬介紹-鐵人賽第二十五日
系列文
初階面試常見題目彙整30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言